3170 XTEMP=XX(DATASET,I):IF XLIN=1 THEN XTEMP=LOG(XX(DATASET,I))/LOG(10)
3180 YTEMP=YY(DATASET,I):IF YLIN=1 THEN YTEMP=LOG(YY(DATASET,I))/LOG(10)
3190 SD=SD+((YTEMP-((A*XTEMP)+B))^2)
3200 SD=SD+((YTEMP-((A*XTEMP)+B))^2)
3210 NEXT I
3220 SD=SQR(SD)/NPTS
3230 COLOR 10,0,1:LOCATE 23,2:PRINT "Data set ";DATASET;" Symbol : ";SYM$(SYMSET(DATASET));" Size : ";SIZESET(DATASET);"% Line type : ";LTYPE$(LTYPESET(DATASET));
3240 LGX$=" ":IF XLIN=1 THEN LGX$="log"
3250 LGY$=" ":IF YLIN=1 THEN LGY$="log"
3260 IF LTYPESET(DATASET)=4 THEN COLOR 13,0,1:LOCATE 24,2:PRINT "Regression :";LGY$;" Y = ";:PRINT USING "#####.###";A;:PRINT " *";LGX$;" X + ";:PRINT USING "#####.###";B;:PRINT " avg dev = ";:PRINT USING "####.###";SD;
3270 COLOR 14,0,1
3280 LOCATE 25,2:INPUT "Change number (0 for none,-1 for sort) :";CHNG
3290 CLS:IF CHNG=0 THEN GOTO 3510
3300 IF CHNG>0 THEN 3440
3310 '
3320 ' Sort the data
3330 '
3340 LOCATE 12,30:PRINT "Sorting ...."
3350 FOR I=1 TO NPTS
3360 FOR J=1 TO NPTS
3370 IF XX(DATASET,J)>XX(DATASET,I) THEN TEMP=XX(DATASET,J):XX(DATASET,J)=XX(DATASET,I):XX(DATASET,I)=TEMP:TEMP=YY(DATASET,J):YY(DATASET,J)=YY(DATASET,I):YY(DATASET,I)=TEMP
3380 NEXT J
3390 NEXT I
3400 GOTO 2970
3410 '
3420 ' Get new value for data point
3430 '
3440 IF CHNG>NPTS THEN NPTSET(DATASET)=NPTSET(DATASET)+1:CHNG=NPTSET(DATASET)
3450 PRINT "Input new values for point ";CHNG
3460 PRINT :PRINT :INPUT "X value ";XX(DATASET,CHNG)
3470 INPUT "Y value ";YY(DATASET,CHNG)
3480 GOTO 2970
3490 '
3500 '
3510 ' Now go to subplot subroutine to plot
3520 '
3530 KLR=15
3540 FOR DSET=1 TO 5
3550 I=DSET
3560 SYM=SYMSET(I)
3570 SIZE=SIZESET(I)
3580 LTYPE=LTYPESET(I)
3590 NPTS=NPTSET(I)
3600 FOR J=1 TO NPTSET(I)
3610 X(J)=XX(I,J):Y(J)=YY(I,J)
3620 NEXT J
3630 MORE=0
3640 IF I>1 THEN MORE=1
3650 GOSUB 4290
3660 NEXT DSET
3670 '
3680 ' display graph until any key pressed (including function keys)
3690 '
3700 A$=INKEY$:IF A$="" THEN 3700 ELSE 1200
3710 '
3720 '
3730 ' This section contains subroutines executed on errors
3740 ' and on key traps.
3750 '
3760 '
3770 IF ERR=5 OR ERR=53 THEN RESUME NEXT ELSE ON ERROR GOTO 0
3780 RETURN 3510 'f1 - plot data
3790 'exit program - return to DOS
3800 PRINT :PRINT "WARNING ! You will lose any unsaved data if you exit !"
3810 PRINT " do you really want to exit (y or n) ? ";
3820 A$=INKEY$:IF A$="" THEN 3820
3830 IF A$="n" OR A$="N" THEN 1180 ELSE SYSTEM
3840 'f2 - exit program - return to DOS
3850 DATASET=DATASET-1:IF DATASET<1 THEN DATASET=1:BEEP
3860 ' f3 - decrease data set number by one
3870 RETURN 2810
3880 'f4 - Next data set
3890 DATASET=DATASET+1:IF DATASET>5 THEN DATASET=5:BEEP
3900 RETURN 2810
3910 'f5 - load specifications from file
3920 RETURN 2540
3930 'f6 - save specifications in file
3940 RETURN 2680
3950 'f7 - load data from file
3960 RETURN 1730
3970 'f8 - save data in file
3980 RETURN 2370
3990 'f9 - go to specifications menu
4000 RETURN 1180
4010 'f10 - go to data display for current data set
5700 LINE (XMIN.P,HALF.P)-(XMIN.P+(TICX/2),HALF.P),1
5710 LINE (XMAX.P-(TICX/2),HALF.P)-(XMAX.P,HALF.P),1
5720 YPOS.P=((YHI.P+(YMAX.P-YTIC))/YT.P)*26!
5730 XPOS.P=6-(LEN(STR$(YTIC))/2)
5740 IF YPOS.P>25 OR YPOS.P<1 THEN BEEP:GOTO 5770
5750 IF XPOS.P>80 OR XPOS.P<1 THEN BEEP:GOTO 5770
5760 LOCATE YPOS.P,XPOS.P:PRINT YTIC
5770 NEXT YTIC
5780 '
5790 ' tic marks and numbers on log x axis
5800 '
5810 '
5820 IF XLIN=0 THEN 5980
5830 FOR CYC=-5 TO 5
5840 FOR LTIC=1 TO 10
5850 XTIC=LTIC*(10^CYC)
5860 LXTIC=LOG(XTIC)/LOG(10)
5870 IF LXTIC<=XMIN.P OR LXTIC>=XMAX.P THEN 5920
5880 LINE (LXTIC,YMIN.P)-(LXTIC,YMIN.P+TICY),1
5890 LINE (LXTIC+XP.P,YMIN.P)-(LXTIC+XP.P,YMIN.P+TICY),1
5900 LINE (LXTIC,YMAX.P-TICY)-(LXTIC,YMAX.P),1
5910 LINE (LXTIC+XP.P,YMAX.P-TICY)-(LXTIC+XP.P,YMAX.P),1
5920 NEXT LTIC
5930 IF LXTIC>=XMIN.P AND LXTIC<=XMAX.P THEN LOCATE 23,(((XLOW.P+(LXTIC-XMIN.P))/XT.P)*80!)-1:PRINT XTIC;:IF LXTIC+.5<=XMAX.P THEN LOCATE 23,(((XLOW.P+(LXTIC+.5-XMIN.P))/XT.P)*80)-1:PRINT 3!*XTIC;
5940 NEXT CYC
5950 '
5960 ' tic marks and numbers on log y axis
5970 '
5980 IF YLIN=0 THEN 6110
5990 FOR CYC=-5 TO 5
6000 FOR LTIC=1 TO 10
6010 YTIC=LTIC*(10^CYC)
6020 LYTIC=LOG(YTIC)/LOG(10)
6030 IF LYTIC<=YMIN.P OR LYTIC>=YMAX.P THEN 6060
6040 LINE (XMIN.P,LYTIC)-(XMIN.P+TICX,LYTIC),1
6050 LINE (XMAX.P-TICX,LYTIC)-(XMAX.P,LYTIC),1
6060 NEXT LTIC
6070 YPOS.P=((YHI.P+(YMAX.P-LYTIC))/YT.P)*26!
6080 XPOS.P=6-((LEN(STR$(YTIC))/2!))
6090 IF LYTIC>=YMIN.P AND LYTIC<=YMAX.P AND YPOS.P>=1 THEN LOCATE YPOS.P,XPOS.P:PRINT YTIC;
6100 NEXT CYC
6110 '
6120 ' now plot data on axes
6130 '
6140 SX=0:SY=0:SSX=0:SXY=0
6150 FOR I=1 TO NPTS
6160 X1(I)=X(I):IF XLIN=1 THEN X1(I)=LOG(X(I))/LOG(10)
6170 Y1(I)=Y(I):IF YLIN=1 THEN Y1(I)=LOG(Y(I))/LOG(10)
6180 IF I>1 THEN LINE(X1(I-1),Y1(I-1))-(X1(I),Y1(I)),1,,STYLE
6190 IF I>1 THEN LINE (X1(I-1)+XP.P,Y1(I-1))-(X1(I)+XP.P,Y1(I)),1,,STYLE
6200 IF SYM=1 THEN LINE (X1(I)-DX,Y1(I)-DY)-(X1(I)+DX,Y1(I)+DY),1,B
6210 IF SYM=1 OR SYM=2 THEN LINE(X1(I)-DX+XP.P,Y1(I)-DY)-(X1(I)+DX+XP.P,Y1(I)+DY),1,B
6220 IF SYM=2 THEN LINE(X1(I)-DX+XP.P,Y1(I)-DY)-(X1(I)+DX+XP.P,Y1(I)+DY),1,BF
6230 IF SYM=3 OR SYM=4 THEN LINE (X1(I)-DX,Y1(I)-DY)-(X1(I)+DX,Y1(I)-DY),1:LINE (X1(I),Y1(I)+DY)-(X1(I)-DX,Y1(I)-DY),1:LINE (X1(I),Y1(I)+DY)-(X1(I)+DX,Y1(I)-DY),1
6240 IF SYM=3 OR SYM=4 THEN LINE (X1(I)+XP.P,Y1(I)+DY)-(X1(I)+XP.P+DX,Y1(I)-DY),1:LINE (X1(I)+XP.P,Y1(I)+DY)-(X1(I)+XP.P-DX,Y1(I)-DY),1
6250 IF SYM=4 THEN PAINT (X1(I)+2*XP.P,Y1(I)),1
6260 IF SYM=5 OR SYM=6 THEN CIRCLE (X1(I),Y1(I)),DX:CIRCLE (X1(I)+XP.P,Y1(I)),DX
6270 IF SYM=6 THEN PAINT (X1(I)+2*XP.P,Y1(I)),1
6280 IF SYM=9 THEN LINE (X1(I)-DX,Y1(I)-DY)-(X1(I)+DX,Y1(I)+DY),1:LINE (X1(I)+DX,Y1(I)-DY)-(X1(I)-DX,Y1(I)+DY),1
6290 IF SYM=7 OR SYM=8 THEN LINE (X1(I),Y1(I)+DY)-(X1(I)+DX,Y1(I)),1:LINE -(X1(I),Y1(I)-DY),1:LINE -(X1(I)-DX,Y1(I)),1:LINE -(X1(I),Y1(I)+DY),1